#include <iostream>
#include <valarray>
#include "../include/matrix.h"

using namespace std;
using namespace mt;

int main(int argc, char** argv) {
/*
  valarray<int> x(10);


  for (int i = 0; i < 10; i++ ) x[i] = i;
  Matrix<int> z(1,10,x);

  for (int i = 0; i < 10; i++ ) {
    cout << z[i] << " ";
  }
  cout<<endl;

  Matrix<int> z1;
  z1.setMValue(1,10,x*2);

  valarray<int> x1(10);
  x1 = z1.getMValue();

  for (int i = 0; i < 10; i++ ) {
    cout << x1[i] << " ";
  }
  cout<<endl;

  Matrix<int> z2(1,10,x+3);
//  Matrix<int> z3;
  Matrix<int> z3 = z1 + z2;

  Matrix<int> z4 = z1 - z2;

  for (int i = 0; i < 10; i++ ) {
    cout << z1[i] - z2[i] << " ";
  }
  cout<<endl;

  for (int i = 0; i < 10; i++ ) {
    cout << z4[i] << " ";
  }
  cout<<endl;

  Matrix<int> z5 = 2 * z;
  for (int i = 0; i < 10; i++ ) {
    cout << z5[i] << " ";
  }
  cout<<endl;

  Matrix<int> z6(2,5,x);
  for (int i = 0; i < 10; i++ ) {
    cout << z6[i] << " ";
  }
  cout<<endl;

  Matrix<int> z7;
  z7 = transpose(z6);
  for (int i = 0; i < 10; i++ ) {
    cout << z7[i] << " ";
  }
  cout<<endl;

*/
  valarray<int> x10(4);
  valarray<int> x11(4);
  x10[0] = 3;
  x10[1] = 4;
  x10[2] = 5;
  x10[3] = 6;
  x11[0] = 1;
  x11[1] = 2;
  x11[2] = 3;
  x11[3] = 4;
  Matrix<int> z10(2,2,x10);
  Matrix<int> z11(2,2,x11);
  Matrix<int> z12;
  z12 = z10 * z11;
  for (int i = 0; i < z12.size(); i++ ) {
    cout << z12[i] << " ";
  }
  cout<<endl;

  Matrix<int> z13;
  z13 = z11 * z10;
  for (int i = 0; i < z13.size(); i++ ) {
    cout << z13[i] << " ";
  }
  cout<<endl;

  valarray<int> x12(2);
  valarray<int> x13(2);
  x12[0] = 3;
  x12[1] = 4;
  x13[0] = 1;
  x13[1] = 2;

  Matrix<int> z15(2,1,x12);
  Matrix<int> z16(1,2,x13);
  Matrix<int> z17;
  z17 = z15 * z16;
  for (int i = 0; i < z17.size(); i++ ) {
    cout << z17[i] << " ";
  }
  cout<<endl;

  Matrix<int> z18;
  z18 = z16 * z15;
  for (int i = 0; i < z18.size(); i++ ) {
    cout << z18[i] << " ";
  }
  cout<<endl;

  Matrix<int> z19;
  z19 = IdentityMatrix(4);
  for (int i = 0; i < z19.size(); i++ ) {
    cout << z19[i] << " ";
  }
  cout<<endl;

  cout << z19(1,1) << endl;

  return 0;
}
